package com.ruoyi.pingjiao.mapper;

import java.util.List;
import java.util.Map;

import com.ruoyi.pingjiao.domain.Evaluation;
import com.ruoyi.pingjiao.domain.query.StatisticQueryParam;
import com.ruoyi.pingjiao.domain.vo.EvaluationReportVO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

/**
 * 评教管理Mapper接口
 *
 * @author 胡浩鹏
 * @date 2022-10-22
 */
public interface EvaluationMapper
{
    /**
     * 查询评教管理
     *
     * @param evaluationId 评教管理主键
     * @return 评教管理
     */
    public Evaluation selectEvaluationByEvaluationId(Long evaluationId);

    /**
     * 查询评教管理列表
     *
     * @param evaluation 评教管理
     * @return 评教管理集合
     */
    public List<Evaluation> selectEvaluationList(Evaluation evaluation);

    /**
     * 获取已完成评教数
     *
     * @param evalutionActivityId 评教管理主键
     * @return 评教管理
     */
    public int statsGetComp(Long evalutionActivityId);

    /**
     * 获取应完成评教数
     *
     * @param courseType 评教管理主键
     * @return 评教管理
     */
    public int statsGetShould(String courseType);

    /**
     * 新增评教管理
     *
     * @param evaluation 评教管理
     * @return 结果
     */
    public int insertEvaluation(Evaluation evaluation);

    /**
     * 新增评教管理
     *
     * @param evaluationList 评教管理
     * @return 结果
     */
    public int insertEvaluations(@Param("evaluationList") List<Evaluation> evaluationList);

    /**
     * 修改评教管理
     *
     * @param evaluation 评教管理
     * @return 结果
     */
    public int updateEvaluation(Evaluation evaluation);

    /**
     * 删除评教管理
     *
     * @param evaluationId 评教管理主键
     * @return 结果
     */
    public int deleteEvaluationByEvaluationId(Long evaluationId);

    /**
     * 批量删除评教管理
     *
     * @param evaluationIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEvaluationByEvaluationIds(Long[] evaluationIds);

    /**
     * 判断学生是否评价老师
     * @param map
     * @return
     */
    public Float getTeacherEvaluatedScore(Map<String,Object> map);

    public int statEvaluatedScoreOfTeacher(Long evaluationActivityId);

    public int statEvaluatedScoreAndVotingRateOfTeacher(Long evaluationActivityId);

    /**
     * @author hpf
     * 添加evaluation
     */
    public int add(Map<String,Object> map);


    /**
     * 教师得分统计过后，统计数据显示按一次统计期内进行显示。
     * @param evaluationActivityId
     * @return
     */
    public List<EvaluationReportVO> getAllEvaluationReport(StatisticQueryParam queryParam);

    public List<EvaluationReportVO> getAllEvaluationReportNew(StatisticQueryParam queryParam);


    /**
     *统计 按活动，按院系得分排名
     * @param map
     * @return
     */
    public List<EvaluationReportVO> getDeptScopeTeacherEvaluationReport(Map<String,Object> map);


    public int addEvaluationHistory(Long evaluationActivityId);

    public int addEvaluationHistoryNew(Long evaluationActivityId);

    /**
     *cjb,最终汇总，查看某教师某个评教活动中试卷各分项得分-（不分课程-不分班）
     */
    public List<Map<String,Object>> getTeacherEvaluationPaperItemScoreReport(Map<String,Object> map);


    /**
     * cjb,最终汇总，查看某教师某个评教活动中试卷各分项得分-（分课程班）
     */
    public List<Map<String,Object>> getTeacherCourseClassEvaluationItemScoreReport(Map<String,Object> map);

    /**
     *cjb,最终汇总，查看某教师某个评教活动中试卷各分项得分-（分课程）
     */
    public List<Map<String,Object>> getTeacherCourseEvaluationItemScoreReport(Map<String,Object> map);

    /**
     * cjb,统计全校教师评教各分数段人数
     */
    public List<Map<String,Object>> getGradeWithActivityId(Long evaluation_actitityId);

    /**
     * cjb,按院系统计教师评教各分数段人数
     */
    public List<Map<String,Object>> getGradeWithActivityIdAndDeptName(Map<String,Object> map);

    List<Map<String, Object>> getDeptRank(Long evaluationActivityId);

    public  int  deleteHistory(Long evaluationActivityId);

    /**
     * cjb,按活动id,教师id统计需要评教手人次，和已完成评教学生人次。
     * @param evaluation_activityId
     * @param teacherId
     */
    @MapKey("courseclass_no")
    public List<Map<String,Object>> countEvaluationProgressByEvaluationActivityIdAndTeacherId(@Param("evaluation_activityId")Long evaluation_activityId,@Param("teacherId")Long teacherId);

    public List<Map<String,Object>> countEvaluationProgressFromCourseclass(@Param("teacherId")Long teacherId);

    public  int  deleteCourseclassHistory(Long evaluationActivityId);


    Object getEvaluationIdByEvaluationPaperId(Long evaluationPaperId);
}
